package com.pai4j.log.service;

import com.pai4j.common.bean.PAIPageResponseBeanUtil;
import com.pai4j.log.entity.OperationLogEntity;
import com.pai4j.log.vo.LogQueryRequest;
import com.pai4j.log.vo.LogStatisticsRequest;
import com.pai4j.log.vo.LogStatisticsVO;
import com.pai4j.log.vo.OperationLogVO;

import java.util.List;

/**
 * 日志服务接口
 *
 * @author: CYM-pai
 * @date: 2025/07/29 15:45
 **/
public interface ILogService {

    /**
     * 保存操作日志
     *
     * @param logEntity 日志实体
     */
    void saveOperationLog(OperationLogEntity logEntity);

    /**
     * 异步保存操作日志
     *
     * @param logEntity 日志实体
     */
    void saveOperationLogAsync(OperationLogEntity logEntity);

    /**
     * 批量保存操作日志
     *
     * @param logEntities 日志实体列表
     */
    void batchSaveOperationLogs(List<OperationLogEntity> logEntities);

    /**
     * 查询操作日志
     *
     * @param request 查询请求
     * @return 分页日志数据
     */
    PAIPageResponseBeanUtil<List<OperationLogVO>> queryOperationLogs(LogQueryRequest request);

    /**
     * 根据链路追踪ID查询日志
     *
     * @param traceId 链路追踪ID
     * @return 日志列表
     */
    List<OperationLogVO> getLogsByTraceId(String traceId);

    /**
     * 获取日志统计信息
     *
     * @param request 统计请求
     * @return 统计结果
     */
    List<LogStatisticsVO> getLogStatistics(LogStatisticsRequest request);

    /**
     * 清理过期日志
     *
     * @param days 保留天数
     * @return 清理数量
     */
    Long cleanExpiredLogs(int days);

    /**
     * 获取日志详情
     *
     * @param logId 日志ID
     * @return 日志详情
     */
    OperationLogVO getLogDetail(String logId);
}
